# 开发分析
'''
# 题目：东方财富基金爬取
# 网址：https://fund.eastmoney.com/
一、需要数据网址
    # Request URL: http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=all&rs=&gs=0&sc=6yzf&st=desc&sd=2021-04-12&ed=2022-04-12&qdii=&tabSubtype=,,,,,&pi=1&pn=50&dx=1&v=0.47809149556567987
二、代码实现
    1. 发送请求
        通过代码方式访问网站
    2. 获取数据
    3. 解析数据 筛选数据
    4. 保存数据 Excel和数据库
    5. 多页爬取

'''


# 基金总排行
import re

import pandas
import requests
import csv
import sqlite3  

# 伪装请求头
def Ranking():
    headers = {
        'Cookie':'qgqp_b_id=e1d7a84f522c1ca42156044d65056541; st_si=74663039780832; st_asi=delete; ASP.NET_SessionId=0gvzzbmh0w3g5kegsp25d3rw; _adsame_fullscreen_16928=1; st_pvi=89163971024888; st_sp=2022-04-12%2016%3A24%3A17; st_inirUrl=http%3A%2F%2Ffundf10.eastmoney.com%2F; st_sn=28; st_psi=20220412203526936-112200312936-1289546186',
        'Host':'fund.eastmoney.com',
        # 防盗链
        'Referer':'http://fund.eastmoney.com/data/fundranking.html',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36',
    }
    for page in range(1,3):
        print(f'------------------正在爬取总排行第{page}页内容')
        url  = f'http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=all&rs=&gs=0&sc=6yzf&st=desc&sd=2021-04-12&ed=2022-04-12&qdii=&tabSubtype=,,,,,&pi={page}&pn=50&dx=1&v=0.47809149556567987'



        # 1. 发送请求
        # <Response [200]>: 发送请求成功结果
        response = requests.get(url=url,headers=headers)

        # 2. 获取数据
        data = response.text

        # 3. 解析数据 筛选数据
        # 正则re
        data_str = re.findall('\[(.*?)\]',data)[0]
        # 4. 保存数据 表格/数据库
        tuple_data = eval(data_str)     #字符串分割


        for td in tuple_data:
            td_list = td.split(',')
            with open('./ranking_csv/总排行.csv',mode='a',encoding='utf-8',newline='') as f:
                csv_write = csv.writer(f)
                csv_write.writerow(td_list)
            print(td)

    # csv写入数据库
    conn = sqlite3.connect("fundDB.db")
    df = pandas.read_csv('./ranking_csv/总排行.csv', header=None,
                             names=['基金代码', '基金名称','基金简称', '日期', '单位净值', '累计净值', '日增长率', '近1周', '近1月', '近3月', '近6月', '近1年', '近2年',
                                    '近3年', '今年来', '成立来', '成立时间', 'data1', '总体', 'data2', '手续费', 'data3', 'data4','data5','data6'])
    df = df.loc[:,
         ['基金代码', '基金名称', '日期', '单位净值', '累计净值', '日增长率', '近1周', '近1月', '近3月', '近6月', '近1年', '成立时间','手续费']]
    df.to_csv('./ranking_csv/总排行.csv', index=False)
    df.to_sql('Ranking', conn, if_exists='append', index=False)
    conn.close()

